/**
 * 区域管理API模块
 * @author Wu.Liang
 * @date 2025-01-14
 * @version 1.0.0
 */

import request from '@/api/request'

/**
 * 区域管理API
 */
export const regionApi = {
  /**
   * 获取当前用户工作区域列表
   * 根据当前登录用户所属物业公司获取社区分区列表，格式为'社区名 - 分区名'
   * 
   * @returns {Promise<Array>} 工作区域列表
   */
  getWorkAreas() {
    return request.get('/api/region/zone/work-areas')
  },

  /**
   * 获取区域树形结构
   * 
   * @param {number} parentId 父区域ID，不传则获取顶级区域
   * @returns {Promise<Array>} 区域树形结构列表
   */
  getRegionTree(parentId = null) {
    const params = parentId ? { parentId } : {}
    return request.get('/api/region/tree', params)
  },

  /**
   * 根据区域ID获取区域信息
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<Object>} 区域信息
   */
  getRegionById(regionId) {
    return request.get(`/api/region/${regionId}`)
  },

  /**
   * 根据区域编码获取区域信息
   * 
   * @param {string} regionCode 区域编码
   * @returns {Promise<Object>} 区域信息
   */
  getRegionByCode(regionCode) {
    return request.get(`/api/region/code/${regionCode}`)
  },

  /**
   * 根据区域类型获取区域列表
   * 
   * @param {number} regionType 区域类型：1-省，2-市，3-区县，4-街道，5-社区
   * @returns {Promise<Array>} 区域列表
   */
  getRegionsByType(regionType) {
    return request.get(`/api/region/type/${regionType}`)
  },

  /**
   * 获取子区域列表
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<Array>} 子区域列表
   */
  getChildRegions(regionId) {
    return request.get(`/api/region/${regionId}/children`)
  },

  /**
   * 获取社区列表
   * 调用后端CommunityController.getCommunityList(CommunityQueryDTO)
   * 
   * @param {Object} queryDTO 查询参数
   * @returns {Promise<Object>} 社区列表
   */
  getCommunityList(queryDTO = {}) {
    return request.get('/api/region/communities/list', { params: queryDTO })
  },

  /**
   * 获取区域层级路径
   * 获取从根区域到指定区域的层级路径
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<Array>} 区域层级路径列表
   */
  getRegionPath(regionId) {
    return request.get(`/api/region/${regionId}/path`)
  },

  /**
   * 批量获取区域信息
   * 
   * @param {Array<number>} regionIds 区域ID列表
   * @returns {Promise<Array>} 区域信息列表
   */
  getRegionsByIds(regionIds) {
    return request.post('/api/region/batch', regionIds)
  },

  /**
   * 检查区域编码是否存在
   * 
   * @param {string} regionCode 区域编码
   * @param {number} excludeRegionId 排除的区域ID
   * @returns {Promise<boolean>} 是否存在
   */
  checkRegionCodeExists(regionCode, excludeRegionId = null) {
    const params = { regionCode }
    if (excludeRegionId) {
      params.excludeRegionId = excludeRegionId
    }
    return request.get('/api/region/check/code', params)
  },

  /**
   * 根据区域名称模糊查询区域列表
   * 
   * @param {string} regionName 区域名称
   * @returns {Promise<Array>} 区域列表
   */
  searchRegionsByName(regionName) {
    return request.get('/api/region/search/name', { regionName })
  },

  /**
   * 获取区域统计信息
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<Object>} 区域统计信息
   */
  getRegionStats(regionId) {
    return request.get(`/api/region/${regionId}/stats`)
  },

  /**
   * 获取所有区域统计信息
   * 
   * @returns {Promise<Object>} 所有区域统计信息
   */
  getAllRegionStatistics() {
    return request.get('/api/region/statistics')
  },

  /**
   * 清除区域缓存
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<boolean>} 清除结果
   */
  clearRegionCache(regionId) {
    return request.delete(`/api/region/cache/${regionId}`)
  },

  /**
   * 清除所有区域缓存
   * 
   * @returns {Promise<boolean>} 清除结果
   */
  clearAllRegionCache() {
    return request.delete('/api/region/cache/all')
  },

  /**
   * 刷新区域统计数据
   * 
   * @param {number} regionId 区域ID
   * @returns {Promise<boolean>} 刷新结果
   */
  refreshRegionStats(regionId) {
    return request.post(`/api/region/${regionId}/refresh-stats`)
  },

  /**
   * 获取指定区域及其所有子区域ID（递归到末梢，包含自身）
   * 用于数据区域范围查询
   *
   * @param {number} regionId 区域ID
   * @returns {Promise<Array<number>>} 区域ID列表
   */
  getRegionAndDescendantIds(regionId) {
    return request.get(`/api/region/${regionId}/descendant-ids`)
  }
}

export default regionApi
